iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

今天來介紹 SwiftUI 基本的專案結構,如果寫過 iOS 的夥伴看到這篇應該是熟悉到不行,那麼此篇可以先跳過,不過因為我是從零學起,所以每個專案細節都不想放過,那麼沒問題的話,就開始介紹囉!

https://i.imgur.com/IafoWIul.png

專案結構

  • LearnHappyLeetCodeApp.swift 這是我們 SwiftUI App 的程式碼入口,也就是啟動 App時候會第一個執行的地方,如果有新建什麼東西是要在 App 活著的整個週期都要存在,可以放在這裡。
  • ContentView.swift 是我們初始化 UI 使用者介面的地方,也是我們所有在專案要做的事情都會建立在這個檔案上,這邊都只能放 SwiftUI 的東西。
  • Assets.xcassets 專門放一些 App 資源檔,也就是如果我們有一些圖片會放在這裡,或是顏色設定,更或是 App 的 Icon,都集中在這邊。
  • PersistenceLearnHappyLeetCode 它是 Core data ,專門設計用來存放資料於本機,背後操作仍是 SQLite,只是被簡化後的版本,讓不懂 SQL 指令的人也可以輕鬆使用。
  • Preview Content 是一個集合,它是方便我們用來測試時放的檔案夾,不僅可以放圖片檔,甚至模擬 API 回覆所製作的 JSON 檔,還有影片聲音都可以放在這裡提供測試預覽時使用。
  • LearnHappyLeetCodeTests 這資料夾就是拿來放單元測試的地方,利用單元測試方便我們測試寫出來的程式邏輯,使程式更加穩固。
  • LearnHappyLeetCodeUITest 這資料夾是用來寫 UI 測試的地方,執行的時候會真正啟動畫面去測試。

主要啟動程式碼介紹

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ContentView.swift 這個檔案裏面的 ContentView 令人比較意外的是宣告為 struct,且他是繼承 view 也就是說他遵循 view 的 protocol,注意不是繼承以往的 UIView,用意是希望預設 View 就是不可輕易變動 (英文叫做 Immutable),而內含的 body 語法比較特別,居然是 var body: some View,去查了一下資料,叫做 opaque return types,也就是說會遵循 View protocol,但我們實作時不需要知道 View 裡面的具體運作,只有編譯器會知道,也就是說,它允許開發者返回一個特定的類型,但並不需要在定義時指定確切的類型。這為 SwiftUI 提供了極大的靈活性,使得我們可以在不犧牲類型安全性的前提下,進行快速的界面開發。

總之,var body: some View 的作用是定義一個返回 View 的計算屬性,並且具體的 View 類型可以在後面的代碼中進行推斷。

Text("Hello, World!") 則是我們建立的文字 View,並且提供給 body 告訴它畫面需要顯示文字,文字內容顯示 Hello, World!

而 ContentView_Previews 無疑就是專門寫預覽用的測試畫面,為了搶先預覽,可以藉由預覽這個 struct 放入不同參數給 ContentView,這一點跟 Jetpack Compose 的設計有異曲同工之妙。

總結

比起過往開發 iOS 的專案結構,SwiftUI 專案結構無疑簡化了很多資訊,這或許就是 Apple 未來要的精神,讓開發者可以很簡單就產出想要的 App,今天介紹就到這裡囉!

感謝以下參考資訊,很多不懂的知識都感謝撰文者詳細說明,有興趣的讀者可以去詳細延伸閱讀。


上一篇
Day 2: 設定專案,建立基本的 SwiftUI 界面
下一篇
Day 4: 初探 SwiftUI 基本 UI 元件的使用
系列文
用 SwiftUI 魔法變出 Leetcode 刷題知識學習 App!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言